Snowflakeの「JAROWINKLER_SIMILARITY」関数を試してみた
こんにちは!DA(データアナリティクス)事業本部 サービスソリューション部の大高です。
Snowflakeには定期的に新しい関数が追加されていますが、今回は「JAROWINKLER_SIMILARITY」という面白い関数を見つけたので試してみようと思います。
なお、この関数は下記のドキュメントに記載のとおりバージョン「6.8」で導入されたようです。
前提
今回検証した環境はSnowflakeの下記バージョンの環境となります。
SELECT CURRENT_VERSION(); +-------------------+ | CURRENT_VERSION() | |-------------------| | 6.17.0 | +-------------------+
ジャロ・ウィンクラー類似度(距離)とは?
今回試してみる関数のドキュメントはこちらです。
解説に記載のある通り、この関数は2つの文字列の類似度を0〜100(100が完全一致)返してくれる関数です。また、大文字と小文字については区別がされません。
この処理の細かい定義については数学的な話になるようですが、ざっくりとは「2つの文字列の先頭部分が一致していると、より類似度が高い」と判断されるロジックのようです。
また、用途としては文章内での単語の類似度から「タイピングミス」や「表記揺れ」を検出するために活用されるようです。
では早速、実際に試してみたいと思います。
試してみた
まずは、自分自身の名前のootaka
同士を試してみます。
SELECT JAROWINKLER_SIMILARITY('ootaka','ootaka'); +-------------------------------------------+ | JAROWINKLER_SIMILARITY('OOTAKA','OOTAKA') | |-------------------------------------------| | 100 | +-------------------------------------------+
これは同じ文字なので100
になりますね。全く違う文字列でも試してみます。
SELECT JAROWINKLER_SIMILARITY('ootaka','z'); +--------------------------------------+ | JAROWINKLER_SIMILARITY('OOTAKA','Z') | |--------------------------------------| | 0 | +--------------------------------------+
これは全く違う文字列なので0
で納得です。
では次に、同じ部にいらっしゃる、たまにチャットの通知先などで間違えられることのあるootakiさんで試してみます。
SELECT JAROWINKLER_SIMILARITY('ootaka','ootaki'); +-------------------------------------------+ | JAROWINKLER_SIMILARITY('OOTAKA','OOTAKI') | |-------------------------------------------| | 93 | +-------------------------------------------+
納得の93
ですね。私もたまに間違えそうになります。
今度は日本語でも試してみます。
SELECT JAROWINKLER_SIMILARITY('おおたかだいすけ','おおたかの森'); +-----------------------------------------------------------+ | JAROWINKLER_SIMILARITY('おおたかだいすけ','おおたかの森') | |-----------------------------------------------------------| | 83 | +-----------------------------------------------------------+ SELECT JAROWINKLER_SIMILARITY('おおたかだいすけ','おおさかだいすき'); +---------------------------------------------------------------+ | JAROWINKLER_SIMILARITY('おおたかだいすけ','おおさかだいすき') | |---------------------------------------------------------------| | 86 | +---------------------------------------------------------------+
感覚的に「まあまあ似てるんじゃない?」と思われる文字は、高い値を出しますね。(面白いですね)
まとめ
以上、Snowflakeの「JAROWINKLER_SIMILARITY」関数を試してみました。
個人的に面白い関数だと思うので、なにか機会があったときに利用できたらと思います。
どなたかのお役に立てば幸いです。それでは!